home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / cross / devpic.lha / devpic / source / picasm / examples / example.asm next >
Assembly Source File  |  1996-09-15  |  1KB  |  91 lines

  1. ;
  2. ; example.asm -- a simple LED flasher
  3. ;
  4.  
  5. ;
  6. ; example source code for picasm by Timo Rossi
  7. ;
  8.  
  9. ;
  10. ; define PIC device type
  11. ;
  12.     device    pic16c84
  13.  
  14. ;
  15. ; define config fuses
  16. ;
  17.     config    CP=off,WDT=off,PWRT=off,OSC=hs
  18.  
  19. ;
  20. ; include PIC register definitions, and some macros
  21. ;
  22.     include "pic16c84.h"
  23.     include "picmac.h"
  24.  
  25. ;
  26. ; bit definitions for two LEDs connected to port A bits 0 and 1
  27. ; bit masks can be computed from bit numbers with the left shift operator.
  28. ;
  29. A_LED1    equ    0
  30. A_LED2    equ    1
  31.  
  32. ;
  33. ; define some register file variables
  34. ;
  35.  
  36.     org    0x0c
  37.  
  38. delay_cnt1    ds    1
  39. delay_cnt2    ds    1
  40.  
  41. ;
  42. ; code start
  43. ;
  44.     org    0
  45.  
  46.     movlw    0xff
  47.     movwf    PORTA    ;initialize port A so that LEDs are off
  48.  
  49.     bsf    STATUS,RP0            ;register page 1
  50.     movlw    ~((1<<A_LED1)|(1<<A_LED2))    ;LEDs as outputs,
  51.     movwf    TRISA                ;other PORTA pins as inputs
  52.     bcf    STATUS,RP0            ;register page 0
  53.  
  54. main_loop
  55.     movlw    1<<A_LED1
  56.     xorwf    PORTA,F        ;toggle led1
  57.  
  58.     clrw            ;maximum delay length (256 counts)
  59.     call    delay
  60.  
  61.     clrw            ;maximum delay length (256 counts)
  62.     call    delay
  63.  
  64.     movlw    (1<<A_LED1)|(1<<A_LED2)
  65.     xorwf    PORTA,F        ;toggle both leds
  66.  
  67.     clrw            ;maximum delay length (256 counts)
  68.     call    delay
  69.  
  70.     goto    main_loop
  71.  
  72. ;
  73. ; delay subroutine
  74. ; input: delay count in W
  75. ;
  76. ; inner loop duration approx:
  77. ; 5*256+3 = 1283 cycles ->
  78. ; 1.28ms with 4MHz crystal (1MHz instruction time)
  79. ;
  80. delay    movwf    delay_cnt1
  81.     clrf    delay_cnt2
  82. delay_a    nop
  83.     nop
  84.     incfsz    delay_cnt2,F
  85.     goto    delay_a
  86.     decfsz    delay_cnt1,F
  87.     goto    delay_a
  88.     return
  89.  
  90.     end
  91.